package ar.fiuba.tp7552.buildadmin.webactions.builds;

import ar.fiuba.tp7552.buildadmin.model.BusinessException;
import ar.fiuba.tp7552.buildadmin.model.builds.Edificio;
import ar.fiuba.tp7552.buildadmin.model.builds.Encargado;
import ar.fiuba.tp7552.buildadmin.service.EdificioService;
import ar.fiuba.tp7552.buildadmin.webactions.BaseAction;

import com.opensymphony.xwork2.Preparable;

public class EdificioAction extends BaseAction implements Preparable {
	
	private EdificioService edificioService;
	private Edificio edificio;
	
	// ~~ Constructor ====================================================
	
	public EdificioAction(EdificioService edificioService) {
		super();
		this.edificioService = edificioService;
	}
	
	// ~~ Actions ========================================================

	@Override
	public void prepare() throws Exception {
		if (edificio != null && edificio.getId() != null) {
			edificio = edificioService.get(edificio.getId());
			if (edificio.getEncargado() == null)
				edificio.setEncargado(new Encargado());
		} else {
			edificio = new Edificio();
			edificio.setEncargado(new Encargado());
		}
	}
	
	public String load() {
		return BaseAction.SUCCESS;
	}
	
	/**
	 * Crea o actualiza un edificio.
	 * @return
	 */
	public String save() {
		if (edificio != null && edificio.isNew()) {
			try {
				edificioService.createEdificio(edificio, BaseAction.getCurrentUser());
			} catch (BusinessException e) {
				this.addActionMessage("Ya existe un edificio con el nombre "+edificio.getNombre());
				return BaseAction.INPUT;
			}
		} else {
			edificioService.update(edificio);
		}
		return BaseAction.SUCCESS;
	}
	
	public String delete() {
		edificioService.delete(edificio);
		return BaseAction.SUCCESS;
	}

	// ~~ getters y setters ========================================================
	
	public Edificio getEdificio() {
		return edificio;
	}

	public void setEdificio(Edificio edificio) {
		this.edificio = edificio;
	}
	
	public Encargado getEncargado() {
		return this.edificio.getEncargado();
	}
	

}
